<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // 普通函数
    // String()  Number()   Boolean()    Array()   Object()

    // 构造函数
    // new String()  new Number()   new Boolean()    new Array()   new Object()
    // var arr = new Array();
    // console.log(arr);

    // var p = new Promise(() => { });
    // console.log(p);

    // 构造函数本质也是一个函数,但是通过new关键让它和普通函数出现了明显的区别


    // new 关键词做了什么操作?
    // 1. 在函数内部创建一个纯净的空对象  {} (构造函数内部创建的  this instanceof fn => true)
    // 2. 强制将this指向创建空对象   this -> {}   

    // 3. 默认返回创建的实例化对象   return this;

    // 构造函数中的this指向: 构造函数的this指向  构造函数在执行过程中创建的实例化对象
    // 注意:为了区分普通函数  和 构造函数  要求构造函数的首字母大写

    /* function fn(){

        console.log("函数内的this:", this, this instanceof fn);
        return this;
    }
    var result = new fn();
    console.log("返回值:", result); */

    function Person(name, age){
        this.name = name;
        this.age = age;
    }

    var zhang = new Person("张三", 18);
    console.log(zhang, zhang instanceof Person);
</script>
</html>